package utils

import (
	"AiBus/global"
	"errors"
	"github.com/go-redis/redis/v7"
	"time"
)

func ExampleNewClient() *redis.Client {
	client := redis.NewClient(&redis.Options{
		Addr:     global.App.Configuration.Redis.Addr + ":" + global.App.Configuration.Redis.Port,
		Password: global.App.Configuration.Redis.Password, // no password set
		DB:       global.App.Configuration.Redis.DB,       // use default DB
	})

	_, err := client.Ping().Result()
	if err != nil {
		panic(err)
	}
	return client
}
func Set(key string, value any) error {
	client := global.App.Redis
	_, err := client.Set(key, value, 5*time.Minute).Result()
	if err != nil {
		return err
	}
	return nil
}

func Get(key string) (string, error) {
	client := global.App.Redis
	result, err := client.Get(key).Result()
	if errors.Is(err, redis.Nil) { // go-redis 库提供了一个 redis.Nil 错误来表示 Key 不存在的错误。

		//if err == redis.Nil {
		return "", err
	} else if err != nil {
		// 异常错误信息
		return "", err
	} else {
		return result, nil

	}
}

/*Hash数据类型操作*/

func SetHash(key, username string, value interface{}) error {

	client := global.App.Redis
	err := client.HSet(key, username, value).Err()
	if err != nil {
		return err
	} else {
		return nil
	}
}

func HGetAll(key, FIELD_NAME string) ([]interface{}, error) {
	client := global.App.Redis
	//	判断hash表中指定字段是否存在
	ok := client.HExists(key, FIELD_NAME).Val()
	if !ok {
		return nil, errors.New("，没有数据")
	} else {
		//如果存在，更具key和对应的字段值，进行查询
		result, err := client.HMGet(key, FIELD_NAME).Result() // 如果对应的hash值存在，就是使用HMGet方法获取对应结果返回给前端
		if err != nil {
			global.App.Log.Error(err.Error())
			return nil, err
		} else {
			return result, nil
		}
	}
}

/*缓存记录操作*/
func HistoryRedis(UserID string) (map[string]string, error) {
	clent := global.App.Redis
	result, err := clent.HGetAll(UserID).Result()
	if err != nil {
		return nil, err
	} else {
		return result, nil
	}
}
